#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>


int g_val = 100;

int main()
{
  pid_t id = fork();

  int cnt = 0;

  if(id == 0)
  {

    while(1){
    printf("i am child    process,ppid: %d,pid: %d g_val:  %d,&g_val:  %p\n "  ,getppid(),getpid(),g_val,&g_val);
    sleep(1);
    cnt++;
    if(cnt == 5)
    {
      g_val = 200;
      printf("child change g_val: 100-> 200\n");
    }
    }
  }

    else{

    while(1){ 
    printf("i am parent   process,ppid: %d,pid: %d g_val:  %d,&g_val: %p\n "  ,getppid(),getpid(),g_val,&g_val);
    sleep(1);
    } 
    }
  return 0;
}



//int g_unval;
//int g_val= 100;
//
//
//int main(int argc,char* argv[],char* env[])
//{
//
//  printf("code addr:%p\n",main);
//  printf("init data addr:%p\n",&g_val);
//  printf("uninit data addr: %p\n",&g_unval);
//  
//  char* heap = (char*)malloc(20);
//  char* heap1 = (char*)malloc(20);
//  char* heap2 = (char*)malloc(20);
//  char* heap3 = (char*)malloc(20);
//  printf("heap addr:%p\n",heap);
//  printf("heap1 addr:%p\n",heap1);
//  printf("heap2 addr:%p\n",heap2);
//  printf("heap3 addr:%p\n",heap3);
//
//  printf("stack addr:%p\n",&heap);
//  printf("stack1 addr:%p\n",&heap1);
//  printf("stack2 addr:%p\n",&heap2);
//  printf("stack3 addr:%p\n",&heap3);
//
//  for(int i = 0; argv[i] ; i++)
//  {
//    printf("argv[%d] addr: %p\n",i,argv[i]);
//  }
//
//  for(int i = 0; env[i];i++)
//  {
//    printf("env[%d] addr: %p\n",i,env[i]);
//  }
//
//  return 0;
//}
//
//
//







